import traceback
from flask import Blueprint, request, jsonify, current_app
from app.models import db, UserAsset, AssetTypeEnum

asset_controller = Blueprint('asset_controller', __name__)

@asset_controller.post('/add_asset')
def add_asset():
    """
    POST /asset/add_asset
    添加用户资产
    请求参数：
    - userid: 用户ID
    - products_id: 产品代码
    - products_name: 产品名称
    - type: 资产类型 (股票、债券、基金、外汇)
    - quantity: 持仓数量
    - buy_price: 买入价格 (用户输入)
    - buy_time: 购入时间 (格式：YYYY-MM-DD HH:mm:ss)
    """
    try:
        data = request.json
        userid = data.get('userid')
        products_id = data.get('products_id')
        products_name = data.get('products_name')
        asset_type = data.get('type')
        quantity = data.get('quantity')
        buy_price = data.get('buy_price')  # 用户输入价格
        buy_time = data.get('buy_time')

        if not all([userid, products_id, products_name, asset_type, quantity, buy_price, buy_time]):
            return jsonify({'code': 1, 'msg': '缺少必要参数'}), 400

        # 创建资产记录
        new_asset = UserAsset(
            userid=userid,
            products_id=products_id,
            products_name=products_name,
            type=AssetTypeEnum[asset_type],
            quantity=quantity,
            buy_price=buy_price
        )
        db.session.add(new_asset)
        db.session.commit()

        return jsonify({'code': 0, 'msg': '资产添加成功', 'asset': str(new_asset)}), 201
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(f"[ASSET] 添加资产失败: {e}")
        current_app.logger.error(traceback.format_exc())
        return jsonify({'code': 1, 'msg': '添加资产失败'}), 500


@asset_controller.get('/list')
def get_user_assets():
    """
    GET /asset/list
    获取指定用户的资产列表
    请求参数：
    - userid: 用户ID
    返回字段：
    - id: 资产ID
    - products_id: 产品代码
    - products_name: 产品名称
    - type: 资产类型
    - quantity: 持仓数量
    - buy_price: 买入价格
    """
    try:
        userid = request.args.get('userid')
        if not userid:
            current_app.logger.error("[ASSET] 缺少用户ID参数")
            return jsonify({'code': 1, 'msg': '缺少用户ID参数'}), 400

        # 查询用户资产
        assets = UserAsset.query.filter_by(userid=userid).all()
        current_app.logger.debug(f"[ASSET] 查询到的资产信息: {assets}")

        if not assets:
            current_app.logger.info(f"[ASSET] 用户ID {userid} 没有资产信息")
            return jsonify({'code': 0, 'msg': '没有资产信息，请添加'}), 200

        asset_list = [
            {
                'id': asset.id,
                'products_id': asset.products_id,
                'products_name': asset.products_name,
                'type': asset.type.value,
                'quantity': asset.quantity,
                'buy_price': asset.buy_price
            }
            for asset in assets
        ]

        current_app.logger.info(f"[ASSET] 用户ID {userid} 的资产列表: {asset_list}")
        return jsonify({'code': 0, 'data': asset_list}), 200
    except Exception as e:
        current_app.logger.error(f"[ASSET] 获取用户资产失败: {e}")
        current_app.logger.error(traceback.format_exc())
        return jsonify({'code': 1, 'msg': '获取用户资产失败'}), 500


@asset_controller.delete('/delete/<int:products_id>')
def delete_user_asset(products_id):
    """
    DELETE /asset/delete/<asset_id>
    删除指定用户的资产
    请求参数：
    - asset_id: 资产ID
    返回字段：
    - code: 状态码
    - msg: 提示信息
    """
    try:
        asset = UserAsset.query.get(products_id)
        if not asset:
            current_app.logger.info(f"[ASSET] 资产ID {products_id} 不存在")
            return jsonify({'code': 1, 'msg': '资产不存在'}), 404

        db.session.delete(asset)
        db.session.commit()

        current_app.logger.info(f"[ASSET] 资产ID {products_id} 删除成功")
        return jsonify({'code': 0, 'msg': '资产删除成功'}), 200
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(f"[ASSET] 删除资产失败: {e}")
        current_app.logger.error(traceback.format_exc())
        return jsonify({'code': 1, 'msg': '删除资产失败'}), 500